package org.springframework.aop.framework;

import org.springframework.aop.AdvisedSupport;

/**
 * 代理工厂 封装了JDK和CGLIB代理的创建 不需要使用者创建 根据工厂判断创建哪个代理对象
 */
public class ProxyFactory extends AdvisedSupport {

    public ProxyFactory() {
    }

    public Object getProxy() {
        return createAopProxy().getProxy();
    }


    private AopProxy createAopProxy() {
        //判断是否支持cglib代理
        if (this.isProxyTargetClass() || this.getTargetSource().getTargetClass().length == 0) {
            //支持则返回cglib代理对象
            return new CglibAopProxy(this);
        }
        //不支持则返回JDK动态代理对象
        return new JdkDynamicAopProxy(this);
    }
}
